<?php
require_once("conf/config.php");

// Siempre que se llame a esta función debe estar después de session_start y con la sesión desactivada.
function login($mail, $pass){
	// Esta funcion coge el mail y la contraseña cifrada de un usuario y procede a hacer login en el sistema.
	// Devuelve un vector con un bool de exito y un string.
	// Si la conexión es positiva devuelve true. Si es negativa devuelve false y además un mensaje de error.

	$config = new Config();
	$retorno = array('exito' => false, 'mensaje' => '');
	
	// Nos conectamos a la base de datos
	$conn = new mysqli($config->url(), $config->user(), $config->pass(), $config->name());
	if($conn->connect_error){
		echo 'Fallo al conectar a MySQL: ' . $conn->connect_errno . ' ' . $conn->connect_error;
		die('Fallo al conectar a MySQL: ' . $conn->connect_errno . ' ' . $conn->connect_error);
	}

	// Escapamos todo lo que pasamos, que hay gente con muy mala sombra
	$mail = $conn->real_escape_string($mail);
	$pass = $conn->real_escape_string($pass);

	// Creamos la consulta y la ejecutamos
	$query = "SELECT Id, Nombre, Avatar, Estado, FechaFinBaneo, FechaUltimaVisita FROM Usuarios WHERE ";
	$query .= "Email = '$mail' AND Password = '$contrasenya'";
	if(!($result = $conn->query($query))){
		echo 'Query invalido: ' . $query;
		die('Query invalido: ' . $query);
	}

	// Si no obtenemos resultados -> Login incorrecto.
	// Como maximo, tendremos un solo resultado.
	if($result->num_rows == 0){
		$retorno['mensaje'] = '<p>Contraseña incorrecta o correo no registrado</p>';
		$result->close();
		$conn->close();
		return $retorno;
	}
	
	// Si llegamos aquí es que la identificación es correcta. Hay un resultado en el resultset
	// y tenemos que verificar los permisos.
	// Cogemos los datos
	$row = $result->fetch_array();
	$result->close();

	// Hemos de comprobar los datos y si son correctos, guardarlos en la sesion
	$Estado = $row['Estado'];
	if($Estado == 'Act'){ // Entramos sin mas
		$_SESSION['idUsuario'] = $row['Id'];
		$_SESSION['nombreUsuario'] = $row['Nombre'];
		$_SESSION['avatarUsuario'] = $row['Avatar'];
		$_SESSION['fechaUltimaVisitaUsuario'] = $row['FechaUltimaVisita'];
		$_SESSION['mailUsuario'] = $mail;
		$retorno['exito'] = true;
	}
	if($Estado == 'Sin'){ // Entraremos y además cambiaremos el estado a 'activo'
		$_SESSION['idUsuario'] = $row['Id'];
		$_SESSION['nombreUsuario'] = $row['Nombre'];
		$_SESSION['avatarUsuario'] = $row['Avatar'];
		$_SESSION['fechaUltimaVisitaUsuario'] = $row['FechaUltimaVisita'];
		$_SESSION['mailUsuario'] = $mail;
		// Podría ser que se ejecutase esta orden justo despues que el scheduler de sql lo borrase.
		// Es un riesgo que se podría asumir, al fin y al cabo.
		$query = "UPDATE Usuarios SET Estado = 'Act' WHERE Id = ". $row['Id'];
		$conn->query($query);
		$retorno['exito'] = true;
	}
	if($Estado == 'Ban'){ // Comprobaremos que el baneo haya pasado y en su caso activaremos
		// la cuenta. Si no, no dejaremos pasar.
		$fechaFinBaneo = new DateTime($row['FechaFinBaneo']);
		$fechaActual = new DateTime();
		if($fechaFinBaneo > $fechaActual){ // Seguimos baneados. El encargado de desbanear es el scheduler de MySQL.
			$retorno['mensaje'] = '<p>Le recordamos que usted está baneado hasta el ' . $fechaFinBaneo->format('d/m/Y') . ' a las ' . $fechaFinBaneo->format('g:i A') . '.</p>';
		}
	}
	if($Estado == 'Fir'){
		$retorno['mensaje'] = '<p>Su cuenta ha sido desactivada</p>';
	}
	
	// Liberamos el resultset y cerramos la conexion
	$result->free_result();
	$conn->close();
	return $retorno;
}
	
	// Cuando llegamos aquí tendremos que saber que:
	// Si ha habido login están activas las variables $_SESSION de idUsuario, nombreUsuario, avatarUsuario,
	// mailUsuario y fechaUltimaVisitaUsuario.
	// Si no ha habido login, o bien se ha muerto la web (esperemos que no) o tendremos un mensaje en
	// $error_login.
?>
